{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "nbsphinx": "hidden"
   },
   "outputs": [],
   "source": [
    "import matplotlib.cbook\n",
    "\n",
    "import warnings\n",
    "import plotnine\n",
    "warnings.filterwarnings(module='plotnine*', action='ignore')\n",
    "warnings.filterwarnings(module='matplotlib*', action='ignore')\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Querying SQL (advanced)\n",
    "\n",
    "**NOTE: THIS DOC IS CURRENTLY IN OUTLINE FORM**\n",
    "\n",
    "In this tutorial, we'll use a dataset of television ratings.\n",
    "\n",
    "* copying data in, and getting a table from SQL\n",
    "* filtering out rows, and aggregating data\n",
    "* looking at shifts in ratings between seasons\n",
    "* checking for abnormalities in the data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Setting up"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "from siuba.tests.helpers import copy_to_sql\n",
    "from siuba import *\n",
    "from siuba.dply.vector import lag, desc, row_number\n",
    "from siuba.dply.string import str_c\n",
    "from siuba.sql import LazyTbl\n",
    "\n",
    "data_url = \"https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-01-08/IMDb_Economist_tv_ratings.csv\"\n",
    "tv_ratings = pd.read_csv(data_url, parse_dates = [\"date\"])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "db_uri = \"postgresql://{user}:{password}@localhost:5433/{db}\".format(\n",
    "                user = \"postgres\",\n",
    "                password = \"\",\n",
    "                db = \"postgres\"\n",
    "                )\n",
    "\n",
    "# create tv_ratings table\n",
    "tbl_ratings = copy_to_sql(tv_ratings, \"tv_ratings\", db_uri)\n",
    "\n",
    "# can also access an existing table\n",
    "tbl_ratings = LazyTbl(db_uri, \"tv_ratings\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><pre># Source: lazy query\n",
       "# DB Conn: Engine(postgresql://postgres:***@localhost:5433/postgres)\n",
       "# Preview:\n",
       "</pre><div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>titleId</th>\n",
       "      <th>seasonNumber</th>\n",
       "      <th>title</th>\n",
       "      <th>date</th>\n",
       "      <th>av_rating</th>\n",
       "      <th>share</th>\n",
       "      <th>genres</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>tt2879552</td>\n",
       "      <td>1</td>\n",
       "      <td>11.22.63</td>\n",
       "      <td>2016-03-10</td>\n",
       "      <td>8.4890</td>\n",
       "      <td>0.51</td>\n",
       "      <td>Drama,Mystery,Sci-Fi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tt3148266</td>\n",
       "      <td>1</td>\n",
       "      <td>12 Monkeys</td>\n",
       "      <td>2015-02-27</td>\n",
       "      <td>8.3407</td>\n",
       "      <td>0.46</td>\n",
       "      <td>Adventure,Drama,Mystery</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>tt3148266</td>\n",
       "      <td>2</td>\n",
       "      <td>12 Monkeys</td>\n",
       "      <td>2016-05-30</td>\n",
       "      <td>8.8196</td>\n",
       "      <td>0.25</td>\n",
       "      <td>Adventure,Drama,Mystery</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tt3148266</td>\n",
       "      <td>3</td>\n",
       "      <td>12 Monkeys</td>\n",
       "      <td>2017-05-19</td>\n",
       "      <td>9.0369</td>\n",
       "      <td>0.19</td>\n",
       "      <td>Adventure,Drama,Mystery</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tt3148266</td>\n",
       "      <td>4</td>\n",
       "      <td>12 Monkeys</td>\n",
       "      <td>2018-06-26</td>\n",
       "      <td>9.1363</td>\n",
       "      <td>0.38</td>\n",
       "      <td>Adventure,Drama,Mystery</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div><p># .. may have more rows</p></div>"
      ],
      "text/plain": [
       "# Source: lazy query\n",
       "# DB Conn: Engine(postgresql://postgres:***@localhost:5433/postgres)\n",
       "# Preview:\n",
       "     titleId  seasonNumber       title       date  av_rating  share  \\\n",
       "0  tt2879552             1    11.22.63 2016-03-10     8.4890   0.51   \n",
       "1  tt3148266             1  12 Monkeys 2015-02-27     8.3407   0.46   \n",
       "2  tt3148266             2  12 Monkeys 2016-05-30     8.8196   0.25   \n",
       "3  tt3148266             3  12 Monkeys 2017-05-19     9.0369   0.19   \n",
       "4  tt3148266             4  12 Monkeys 2018-06-26     9.1363   0.38   \n",
       "\n",
       "                    genres  \n",
       "0     Drama,Mystery,Sci-Fi  \n",
       "1  Adventure,Drama,Mystery  \n",
       "2  Adventure,Drama,Mystery  \n",
       "3  Adventure,Drama,Mystery  \n",
       "4  Adventure,Drama,Mystery  \n",
       "# .. may have more rows"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tbl_ratings\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Inspecting a single show"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>titleId</th>\n",
       "      <th>seasonNumber</th>\n",
       "      <th>title</th>\n",
       "      <th>date</th>\n",
       "      <th>av_rating</th>\n",
       "      <th>share</th>\n",
       "      <th>genres</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>tt0118276</td>\n",
       "      <td>1</td>\n",
       "      <td>Buffy the Vampire Slayer</td>\n",
       "      <td>1997-04-14</td>\n",
       "      <td>7.9629</td>\n",
       "      <td>11.70</td>\n",
       "      <td>Action,Drama,Fantasy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tt0118276</td>\n",
       "      <td>2</td>\n",
       "      <td>Buffy the Vampire Slayer</td>\n",
       "      <td>1997-12-31</td>\n",
       "      <td>8.4191</td>\n",
       "      <td>19.41</td>\n",
       "      <td>Action,Drama,Fantasy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>tt0118276</td>\n",
       "      <td>3</td>\n",
       "      <td>Buffy the Vampire Slayer</td>\n",
       "      <td>1999-01-29</td>\n",
       "      <td>8.6233</td>\n",
       "      <td>17.12</td>\n",
       "      <td>Action,Drama,Fantasy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tt0118276</td>\n",
       "      <td>4</td>\n",
       "      <td>Buffy the Vampire Slayer</td>\n",
       "      <td>2000-01-19</td>\n",
       "      <td>8.2205</td>\n",
       "      <td>16.19</td>\n",
       "      <td>Action,Drama,Fantasy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tt0118276</td>\n",
       "      <td>5</td>\n",
       "      <td>Buffy the Vampire Slayer</td>\n",
       "      <td>2001-01-12</td>\n",
       "      <td>8.3028</td>\n",
       "      <td>11.99</td>\n",
       "      <td>Action,Drama,Fantasy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>tt0118276</td>\n",
       "      <td>6</td>\n",
       "      <td>Buffy the Vampire Slayer</td>\n",
       "      <td>2002-01-29</td>\n",
       "      <td>8.1008</td>\n",
       "      <td>8.45</td>\n",
       "      <td>Action,Drama,Fantasy</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>tt0118276</td>\n",
       "      <td>7</td>\n",
       "      <td>Buffy the Vampire Slayer</td>\n",
       "      <td>2003-01-18</td>\n",
       "      <td>8.0460</td>\n",
       "      <td>9.89</td>\n",
       "      <td>Action,Drama,Fantasy</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     titleId  seasonNumber                     title       date  av_rating  \\\n",
       "0  tt0118276             1  Buffy the Vampire Slayer 1997-04-14     7.9629   \n",
       "1  tt0118276             2  Buffy the Vampire Slayer 1997-12-31     8.4191   \n",
       "2  tt0118276             3  Buffy the Vampire Slayer 1999-01-29     8.6233   \n",
       "3  tt0118276             4  Buffy the Vampire Slayer 2000-01-19     8.2205   \n",
       "4  tt0118276             5  Buffy the Vampire Slayer 2001-01-12     8.3028   \n",
       "5  tt0118276             6  Buffy the Vampire Slayer 2002-01-29     8.1008   \n",
       "6  tt0118276             7  Buffy the Vampire Slayer 2003-01-18     8.0460   \n",
       "\n",
       "   share                genres  \n",
       "0  11.70  Action,Drama,Fantasy  \n",
       "1  19.41  Action,Drama,Fantasy  \n",
       "2  17.12  Action,Drama,Fantasy  \n",
       "3  16.19  Action,Drama,Fantasy  \n",
       "4  11.99  Action,Drama,Fantasy  \n",
       "5   8.45  Action,Drama,Fantasy  \n",
       "6   9.89  Action,Drama,Fantasy  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "buffy = (tbl_ratings\n",
    "  >> filter(_.title == \"Buffy the Vampire Slayer\")\n",
    "  >> collect()\n",
    "  )\n",
    "\n",
    "buffy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>avg_rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>8.239343</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   avg_rating\n",
       "0    8.239343"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "buffy >> summarize(avg_rating = _.av_rating.mean())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Average rating per show, along with dates"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><pre># Source: lazy query\n",
       "# DB Conn: Engine(postgresql://postgres:***@localhost:5433/postgres)\n",
       "# Preview:\n",
       "</pre><div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>avg_rating</th>\n",
       "      <th>date_range</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Friends from College</td>\n",
       "      <td>6.875100</td>\n",
       "      <td>2017 - 2017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Better Things</td>\n",
       "      <td>8.133150</td>\n",
       "      <td>2017 - 2016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>How to Get Away with Murder</td>\n",
       "      <td>8.762340</td>\n",
       "      <td>2018 - 2014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Dexter</td>\n",
       "      <td>8.582400</td>\n",
       "      <td>2013 - 2006</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Queen of the South</td>\n",
       "      <td>8.574733</td>\n",
       "      <td>2018 - 2016</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div><p># .. may have more rows</p></div>"
      ],
      "text/plain": [
       "# Source: lazy query\n",
       "# DB Conn: Engine(postgresql://postgres:***@localhost:5433/postgres)\n",
       "# Preview:\n",
       "                         title  avg_rating   date_range\n",
       "0         Friends from College    6.875100  2017 - 2017\n",
       "1                Better Things    8.133150  2017 - 2016\n",
       "2  How to Get Away with Murder    8.762340  2018 - 2014\n",
       "3                       Dexter    8.582400  2013 - 2006\n",
       "4           Queen of the South    8.574733  2018 - 2016\n",
       "# .. may have more rows"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "avg_ratings = (tbl_ratings \n",
    "  >> group_by(_.title)\n",
    "  >> summarize(\n",
    "       avg_rating = _.av_rating.mean(),\n",
    "       date_range = str_c(_.date.dt.year.max(), \" - \", _.date.dt.year.min())\n",
    "       )\n",
    "  )\n",
    "\n",
    "avg_ratings"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Biggest changes in ratings between two seasons"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><pre># Source: lazy query\n",
       "# DB Conn: Engine(postgresql://postgres:***@localhost:5433/postgres)\n",
       "# Preview:\n",
       "</pre><div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>max_shift</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Third Watch</td>\n",
       "      <td>4.8500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Law &amp; Order: Special Victims Unit</td>\n",
       "      <td>2.0508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Greek</td>\n",
       "      <td>1.9068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Roseanne</td>\n",
       "      <td>1.7177</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div><p># .. may have more rows</p></div>"
      ],
      "text/plain": [
       "# Source: lazy query\n",
       "# DB Conn: Engine(postgresql://postgres:***@localhost:5433/postgres)\n",
       "# Preview:\n",
       "                               title  max_shift\n",
       "0                        Third Watch     4.8500\n",
       "1  Law & Order: Special Victims Unit     2.0508\n",
       "2                              Greek     1.9068\n",
       "3                           Roseanne     1.7177\n",
       "# .. may have more rows"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "top_4_shifts = (tbl_ratings\n",
    "  >> group_by(_.title)\n",
    "  >> arrange(_.seasonNumber)\n",
    "  >> mutate(rating_shift = _.av_rating - lag(_.av_rating))\n",
    "  >> summarize(\n",
    "       max_shift = _.rating_shift.max()\n",
    "     )\n",
    "  >> arrange(-_.max_shift)\n",
    "  >> head(4)\n",
    "  )\n",
    "\n",
    "top_4_shifts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "<ggplot: (294189085)>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "big_shift_series = (top_4_shifts\n",
    "  >> select(_.title)\n",
    "  >> inner_join(_, tbl_ratings, \"title\")\n",
    "  >> collect()\n",
    "  )\n",
    "\n",
    "from plotnine import *\n",
    "\n",
    "(big_shift_series\n",
    "  >> ggplot(aes(\"seasonNumber\", \"av_rating\"))\n",
    "   + geom_point()\n",
    "   + geom_line()\n",
    "   + facet_wrap(\"~ title\")\n",
    "   + labs(\n",
    "       title = \"Seasons with Biggest Shifts in Ratings\",\n",
    "       y = \"Average rating\",\n",
    "       x = \"Season\"\n",
    "     )\n",
    "  )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Do we have full data for each season?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><pre># Source: lazy query\n",
       "# DB Conn: Engine(postgresql://postgres:***@localhost:5433/postgres)\n",
       "# Preview:\n",
       "</pre><div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>title</th>\n",
       "      <th>titleId</th>\n",
       "      <th>seasonNumber</th>\n",
       "      <th>date</th>\n",
       "      <th>av_rating</th>\n",
       "      <th>share</th>\n",
       "      <th>genres</th>\n",
       "      <th>row</th>\n",
       "      <th>mismatch</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7th Heaven</td>\n",
       "      <td>tt0115083</td>\n",
       "      <td>1</td>\n",
       "      <td>1996-08-26</td>\n",
       "      <td>7.700</td>\n",
       "      <td>0.10</td>\n",
       "      <td>Drama,Family,Romance</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7th Heaven</td>\n",
       "      <td>tt0115083</td>\n",
       "      <td>10</td>\n",
       "      <td>2006-05-08</td>\n",
       "      <td>6.300</td>\n",
       "      <td>0.01</td>\n",
       "      <td>Drama,Family,Romance</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ABC Afterschool Specials</td>\n",
       "      <td>tt0202179</td>\n",
       "      <td>25</td>\n",
       "      <td>1996-09-12</td>\n",
       "      <td>3.300</td>\n",
       "      <td>0.10</td>\n",
       "      <td>Adventure,Comedy,Drama</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>American Gothic</td>\n",
       "      <td>tt5257744</td>\n",
       "      <td>1</td>\n",
       "      <td>2016-08-05</td>\n",
       "      <td>7.535</td>\n",
       "      <td>0.07</td>\n",
       "      <td>Crime,Drama,Mystery</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>American Gothic</td>\n",
       "      <td>tt0111880</td>\n",
       "      <td>1</td>\n",
       "      <td>1995-09-22</td>\n",
       "      <td>7.800</td>\n",
       "      <td>0.08</td>\n",
       "      <td>Drama,Horror,Thriller</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div><p># .. may have more rows</p></div>"
      ],
      "text/plain": [
       "# Source: lazy query\n",
       "# DB Conn: Engine(postgresql://postgres:***@localhost:5433/postgres)\n",
       "# Preview:\n",
       "                      title    titleId  seasonNumber       date  av_rating  \\\n",
       "0                7th Heaven  tt0115083             1 1996-08-26      7.700   \n",
       "1                7th Heaven  tt0115083            10 2006-05-08      6.300   \n",
       "2  ABC Afterschool Specials  tt0202179            25 1996-09-12      3.300   \n",
       "3           American Gothic  tt5257744             1 2016-08-05      7.535   \n",
       "4           American Gothic  tt0111880             1 1995-09-22      7.800   \n",
       "\n",
       "   share                  genres  row  mismatch  \n",
       "0   0.10    Drama,Family,Romance    1     False  \n",
       "1   0.01    Drama,Family,Romance    2      True  \n",
       "2   0.10  Adventure,Comedy,Drama    1      True  \n",
       "3   0.07     Crime,Drama,Mystery    1     False  \n",
       "4   0.08   Drama,Horror,Thriller    2      True  \n",
       "# .. may have more rows"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mismatches = (tbl_ratings\n",
    "  >> arrange(_.title, _.seasonNumber)\n",
    "  >> group_by(_.title)\n",
    "  >> mutate(\n",
    "       row = row_number(_),\n",
    "       mismatch = _.row != _.seasonNumber\n",
    "     )\n",
    "  >> filter(_.mismatch.any())\n",
    "  >> ungroup()\n",
    "  )\n",
    "\n",
    "\n",
    "mismatches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>n</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    n\n",
       "0  54"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mismatches >> distinct(_.title) >> count() >> collect()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
